/**
* @author Eugenia Jose
* @author Fernando Turon
* @version 1.0 19-04-12
*
* La clase GestorUniversidad se encarga de gestionar la persistencia de los datos relativos a Universidades
*
* @see Universidad, GestorBBDD, GestorIdiomas
*/

package edu.uoc.tds.pec4.server.bbdd;


import edu.uoc.tds.pec4.common.RemotoInterface;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Connection;

import javax.swing.JOptionPane;

import edu.uoc.tds.pec4.exception.CampoVacioException;
import edu.uoc.tds.pec4.i18n.GestorIdiomas;
import edu.uoc.tds.pec4.model.Universidad;

public class GestorUniversidad {
    
    RemotoInterface remoto;
    
    public GestorUniversidad(RemotoInterface remoto){
        this.remoto = remoto;
    }

    /**
     * Método para obtener la instancia de Universidad que corresponde a un indetificador de universidad
     * {pre: id_universidad el identificador de universidad}
     * {post: una instancia de Universidad correspondiente al id_universidad pasado por parámetro}
     * @param id_universidad de tipo entero hace referencia al identificador de universidad
     */
    public Universidad getUniversidad(int id_universidad){
	//Establecemos la sentencia para obtener los datos asociados a ese id_universidad
        Universidad universidad = null;
        String sqlString = null;
	sqlString = "SELECT * FROM UNIVERSIDAD WHERE ID_UNIVERSIDAD = ?;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//Capturaremos la excepcion en caso de error
        try{
            if(id_universidad==0) throw new CampoVacioException();

            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, id_universidad);
            resultSet = preparedStatement.executeQuery();

            //Si la consulta devuelve un dato generaremos la instancia correspondiente que devovlera el método
            if(resultSet.next()){
                String nombre = null;
		nombre = resultSet.getString("nombre");

                //instanciamos la clase Universidad con los datos recuperados de la BBDD
                universidad = new Universidad(id_universidad, nombre);
            }

            //Si no se encuentra en la BBDD ese id_universidad para ninguna universidad
            else{
                JOptionPane.showMessageDialog(null, "No hay una universidad para ese id_universidad", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }

        /** Capturamos excepción no se encuentre el id_universidad buscado*/
        catch(CampoVacioException exc){
           JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.gestorbbdd.bbdd"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        /** Capturamos excepción de carácter general*/
        catch (Exception exc) {
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.general"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        /** En cualquier caso ejecutaremos el siguiente código*/
        finally {
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepción de carácter general*/
            catch (Exception exc) {
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.general"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            }

        }

        return universidad;
    }
}
